jQuery最新xss漏洞分析

您所在的位置:网站首页 jquery 331minjs jQuery最新xss漏洞分析

jQuery最新xss漏洞分析

2023-02-23 07:58| 来源: 网络整理| 查看: 265

一、背景

jQuery官方上周发布了最新版本3.5.0,主要修复了两个安全问题,官方博客为:

https://blog.jquery.com/2020/04/10/jquery-3-5-0-released/

据NVD描述:在大于或等于1.2且在3.5.0之前的jQuery版本中,即使执行了消毒(sanitize)处理,也仍会执行将来自不受信任来源的HTML传递给jQuery的DOM操作方法(即html()、.append()等),从而导致xss漏洞。

二、前置知识

在讲解漏洞之前,需要了解jQuery的基本用法和历史漏洞,具体可参考:jQuery框架漏洞全总结及开发建议:

https://mp.weixin.qq.com/s/M1BYj6VbeoNV4C5M7cR_hA

而与此次jQuery漏洞联系比较紧密的是html()等方法,此方法返回或设置被选元素的内容 (inner HTML),可用于设置所有选定元素的内容,看一个简单的使用案例:

此处定义一个点击事件,会对所有的p元素进行匹配,并修改为相同的内容。

三、漏洞复现

对于此漏洞原作者搭建了在线环境,内置了三个xss poc,点击Append via .html()按钮即可触发xss:

https://vulnerabledoma.in/jquery_htmlPrefilter_xss.html

审查源码,逻辑很简单:

首先使用如下代码模拟了一个开发场景,即将页面的所有div元素替换为根据ID取到的sanitizedHTML:

function test(n,jq){ sanitizedHTML = document.getElementById('poc'+n).innerHTML; if(jq){ $('#div').html(sanitizedHTML); }else{ div.innerHTML=sanitizedHTML; } }

虽然三个poc都使用了包含onerror事件的img标签,但其实它们是放在属性或style元素内部,因此会绕过HTML清理器。

以poc1为例,根据此id取到的值如下:

点击之后,执行xss,此时审查div元素:

发现我们提交的poc多了一个闭合标签,变成了:

闭合了标签,成功执行后面的脚本,导致xss。

四、漏洞原理1、CVE-2020-11022

导致上述问题的关键是,在html()方法中,作为参数传递的HTML字符串将传递到 $ .htmlPrefilter()方法:

https://api.jquery.com/jQuery.htmlPrefilter/

这个方法用于替换自闭合标签,如将 替换为 ,3.x版本之前使用的正则为:

rxhtmlTag =/]*)\/>/gi [...] htmlPrefilter: function( html ) { return html.replace(rxhtmlTag, "" ); }

3.x之后使用的正则为:

rxhtmlTag =/\x20\t\r\n\f]*)[^>]*)\/>/gi

这就使用到环境里的poc2(仅适用于jQuery3.x),注意这里的xss payload是作为属性出现,所以可以绕过消毒器规则:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3